package util.greedy;

import bean.Worker;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

public class MaxItem2 {

    /**
     * Top1贪心算法 的第三行的 MAXITEM(g∪{w})
     * 用来计算当前团队中加入当前正在遍历的工人后的工人技能集合与任务技能集合的交集
     * Attention！！！要考虑到工人的 capacity
     * @param team 当前组建的团队
     * @param worker 当前正在遍历的工人
     * @param taskSkills 任务技能集合
     * @return 返回交集中技能的数量
     */
    public static int maxItem(HashSet<Worker> team, Worker worker, HashSet<String> taskSkills) {
        List<Worker> teamNew = new ArrayList<>();
        for (Worker w : team) {
            teamNew.add(w);
        }
        teamNew.add(worker);

        //此集合用来存放，team中工人的技能集合与任务技能集合的交集
        HashSet<String> intersection = new HashSet<>();

        //遍历team中的每一个工人
        for (Worker w : teamNew) {
            ArrayList<String> wSkills = new ArrayList<>();
            Iterator<String> iterator = w.getSkills().iterator();
            while (iterator.hasNext()) {
                wSkills.add(iterator.next());
            }
            //count用来标记工人的能力，如果工人技能中是任务所需的技能数量大于工人能力，则不再加入计算
            int capacity = w.getCapacity();
            int count = 0;
            //比较当前工人的技能和任务所需技能，如果工人技能是任务所需的，则将此技能加入交集intersection
            f : for (String ws : wSkills) {
                for (String tSkill : taskSkills) {
                    if (ws == tSkill) {
                        if (count==capacity){
                            break f;
                        }
                        count++;
                        intersection.add(ws);
                    }
                }
            }
        }
        return intersection.size();
    }
}
